/**
 * c库简单封装类
 * 
 * 开发者   : Marco
 * 创建时间 : 2015年12月8日, 上午12:36
 */

#ifndef __MARCO_MYSQL_SIMPLE_H__
#define __MARCO_MYSQL_SIMPLE_H__

#ifdef __cplusplus

#include <mysql/mysql.h>

namespace marco {
namespace mysql {

class simple {
public:
    explicit simple(void);
    ~simple(void);
    bool selectDb(const char *db); // 选择数据库
    bool connect(void); // 连接
    bool connect(const char* dbname); // 连接到指定的数据库名，其余参数使用设定的
    bool connect(const char *host, const char *user, const char *password, unsigned short port, const char* dbname); // 连接到指定的参数
    bool connectNoDb(void); // 仅连接,不指定数据库
    
    bool query(const char *sql, int len); // 查询

    bool start(void) { return query("START TRANSACTION;", 18); } // 启动事务
    bool commit(void) { return query("COMMIT;", 7); } // 提交事务
    bool rollback(void) { return query("ROLLBACK;", 9); } // 回滚事务
    int affectRows(void) { return mysql_affected_rows(mysql_); } // 影响行数
    bool getResult(void); // 获取结果集
    bool useResult(void); // 使用结果集,不载入本地缓存
    void freeResult(void); // 释放结果集
    int getNumRows(void) { return mysql_num_rows(res_); } // 获取数据记录行数
    unsigned int getLastInsertId(void) { return (unsigned int)mysql_insert_id(mysql_); } // 获取最后插入记录的ID
    char** getOneRecord(void) { return mysql_fetch_row(res_); } // 获取一条记录
    const char* getError(void) { return mysql_error(mysql_); } // 获取错误信息

    static void setConnectionInfo(const char *host, const char *user, const char *password, unsigned short port, const char* dbname); // 设置连接信息, 所有连接共享
    
private:
    static char* host_;
    static char* user_;
    static char* password_;
    static char* dbname_;
    static unsigned short port_;
    MYSQL* mysql_;  // mysql句柄
    MYSQL_RES* res_ {nullptr};	// 查询结果
};


} /* namespace db */
} /* namespace marco */
#endif /* __cplusplus */
#endif /* __MARCO_MYSQL_SIMPLE_H__ */
